package DesignPattern.Proxy.AddFunction;

/**
 * @Author self
 * @Date 2024/8/12 20:22
 */
/*在 Java 中，利用 Proxy 设计模式为对象添加功能通常是通过动态代理（Dynamic Proxy）来实现的。
        动态代理允许我们在运行时创建代理类，并且能够在不修改原始对象代码的情况下，为对象的某些方法添加额外的功能，
        如日志记录、权限验证等。*/

/*优点：
        无需修改原始类：通过代理模式，能在不改变原始类代码的情况下，动态为对象添加功能。
        高扩展性：可以很容易地为其他方法或其他类添加类似功能，比如日志、事务处理、权限控制等。
        解耦：将功能的增强逻辑与业务逻辑分开，使得代码更加清晰、可维护。
适用场景：
        需要在不修改原始类代码的情况下，增强对象的某些功能，如日志记录、权限控制、事务处理等。
        需要在方法调用前后添加统一的处理逻辑。*/
public class ProxyPatternExample {
    public static void main(String[] args) {
        // 创建原始对象
        Service service = new ServiceImpl();

        // 创建代理对象，并为其添加日志功能
        Service proxyService = (Service) ServiceProxy.newProxyInstance(service);

        // 调用代理对象的方法，触发日志记录功能
        proxyService.performOperation();
    }
}

